关于sata状态寄存器和错误寄存器的理解

您所在的位置:网站首页 sata类型 ahci 关于sata状态寄存器和错误寄存器的理解

关于sata状态寄存器和错误寄存器的理解

2023-08-19 01:43| 来源: 网络整理| 查看: 265

在AHCI协议中Port Register中有如下几个寄存器,我们这里主要关注PxSSTS和PxSERR

2. 什么是SCR寄存器

参考AHCI协议14.1章节

Sata host适配器包括了一个额外的寄存器块,这些寄存器是分离的独立的,映射了ATA command Block Register,用来上报状态和错误信息。

这些寄存器,Serial ATA Status and Control registers 即SCR寄存器

3. PxSSTS寄存器和PxSERR寄存器与SCR寄存器的关系

 

4. SCR寄存器是什么?从哪里来?

上面的(1)中提到了SCR寄存器是映射了ATA command Block Register,那么该寄存器从哪里来呢?下图可以解释该问题:

可以看到写操作由于是host主动发起的,这时ATA command block中并没有状态和错误寄存器的信息,我们更关注的是读操作,可以看到ATA command block中包含了状态寄存器和错误寄存器。

目前能确定的ATA command register 和 SSTATUS走的不是同一条路,更新并不关联。

 

5. ATA command register从host到device打通

从下图可以看到在transport layer,host中有command Register和control register,我理解这就是AHCI协议中描述的ATA command block and control block register,应该也就是我们常说的shadow register,而且在device端也可以看到对应的模块。

那么从host出发,我们在application 层组包触发命令发送,host适配器首先在transport层填充shadow register,然后device transport层收到。反之亦然。

6. Status/Error寄存器中到底是什么内容

协议中对此也有描述,不过太复杂,各bit对应含义太多。

这里我们列举最通俗的一种情况,我们参考了微信公众号【存储随笔】中的描述见下图

7. 关于SStatus

其实这两个寄存器也就是我们在AHCI协议中看到的PxSSTS和PxSERR寄存器。

这两个寄存器从协议中看是用来描述sata host接口状态和错误信息的。

在这里我们首先展示一下SStatus寄存器,下图摘自AHCI协议

从手册中的描述来看一旦phy层触发了COMRESET to device,这时该寄存器就会更新

8. 关于SError寄存器

错误寄存器可以分为两部分

高16bit提供了比较直观的错误

低16bit只是说明了错误类型

所有一旦发生异常上报错误时,该寄存器不止上报一种错误。

 

最后,本文档主要说明两条信息线的维护流程

接收FIS中的status/error - host shadow register(ATA command) - device Task file data registerSStatus(PxSSTS)/SError(PxSERR)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3